const db = require('../../dataBase/index');  // 数据库
const bcrypt = require('bcryptjs');  // 密码加密
const jwt = require('jsonwebtoken');  // 生成 token
const config = require('../config')

const loginHandle = {
  // 注册 路由处理函数
  register(req, res) {
    const loginInfo = req.body;  // 客户端发送的数据

    // 在数据库中查询用户是否存在
    const sqlStr = 'SELECT * FROM login where status = 0 and loginName = ? '
    db.query(sqlStr, loginInfo.loginname, (err, results) => {
      if (err) return res.cwcl('数据库查询语句失败：' + err)

      if (results.length > 0) return res.cwcl('用户名已存在')

      // * 用户不存在，执行注册
      // 密码加密
      loginInfo.password = bcrypt.hashSync(loginInfo.password, 10);
      let sqlInsertStr = 'INSERT INTO login set ?'
      db.query(sqlInsertStr, {
        loginname: loginInfo.loginname,
        password: loginInfo.password,
        eMail: loginInfo.eMail ? loginInfo.eMail : '',
        status: 0
      }, (err, results) => {
        if (err) return res.cwcl('数据库插入语句执行失败！' + err)
        if (results.affectedRows != 1) return res.cwcl('用户注册失败！')
        res.send({
          code: 0,
          msg: '用户注册成功',
          data: loginInfo
        })
      })
    })
  },

  // 登录 路由处理函数
  login(req, res) {
    const loginInfo = req.body
    // 在数据库中查询用户是否存在
    const sqlStr = 'SELECT * FROM login where status = 0 and loginName = ? '
    db.query(sqlStr, loginInfo.loginname, (err, results) => {
      if (err) return res.cwcl('数据库查询语句失败！' + err)
      if (results.length < 1) return res.cwcl('用户不存在！')

      // * 用户存在，验证密码
      const compareResults = bcrypt.compareSync(loginInfo.password, results[0].password)
      if (!compareResults) return res.cwcl('密码错误！')

      // 得到用户登录信息，清空密码
      const login = { ...results[0], password: '' }
      const tokenStr = jwt.sign(login, config.jwtSecretKey, { expiresIn: config.expiresIn });
      res.send({
        code: 0,
        msg: '登陆成功',
        token: 'Bearer ' + tokenStr,
        data: login
      });
    })

  },

}

module.exports = loginHandle